package com.eastfair.home.exceptioncode;

import com.eastfair.annotation.base.LanguageTypeEnum;
import com.eastfair.core.context.ContextUtil;
import com.eastfair.core.exception.code.BaseExceptionCode;

/**
 * 场馆服务后台错误码.
 * AABBBCCC   AA(16)  系统编号   BBB 模块    CCC 具体异常
 * 模块编号
 * 报馆：001
 * 一键报馆：002
 * 加班审核: 003
 * 报修：004
 *
 * @author dqq
 * @date 2022 /7/14
 */
public enum HomeExceptionCode implements BaseExceptionCode {

    /*
     *********************报馆********************
     */
    /**
     * 搭建商基本信息审核记录不存在
     */
    REPORT_BUILDER_AUDIT_NOT_EXIST(16001001, "搭建商基本信息审核记录不存在", ""),
    /**
     * 展位基本信息审核记录不存在
     */
    REPORT_SITE_AUDIT_NOT_EXIST(16001002, "展位基本信息审核记录不存在", ""),
    /**
     * 主场图纸分类查询错误
     */
    HOME_DRAWING_QUERY_ERROR(16001003, "主场图纸分类查询错误", ""),
    /**
     * 报馆审核记录不存在
     */
    REPORT_SPACE_AUDIT_NOT_EXIST(16001004, "报馆审核记录不存在", ""),
    /**
     * 展商不存在
     */
    EXHIBITOR_NOT_EXIST(16001005, "展商不存在", ""),
    /**
     * 报馆图纸不存在
     */
    REPORT_DRAWING_NOT_EXIST(16001006, "报馆图纸不存在", ""),
    /**
     * 角色菜单不能为空
     */
    NOT_ROLE_MENU_NULL(16001007,"角色菜单不能为空",""),

    /**
     * 服务商集合不能为空
     */
    NOT_SERVICE_PROVIDER_NULL(13001001, "服务商集合不能为空", ""),
    /**
     * 已经审核通过，不可再审核
     */
    AUDIT_APPROVED_CAN_NOT_AUDIT(16001008, "已经审核通过，不可再审核", ""),
    /**
     * 报馆审核无需场馆审核.
     */
    REPORT_SPACE_AUDIT_NOT_AUDIT_BY_VENUE(16001009, "报馆审核无需场馆审核", ""),
    /**
     * 存在报馆记录，不可以操作管理费服务.
     */
    EXIST_REPORT_SPACE_CANT_DEAL_SERVICE_TIME(16001010, "存在报馆记录，不可以操作管理费服务", ""),

    /*
     *********************报馆********************
     */
    /**
     * 一键报馆记录不存在
     */
    REPORT_VENUE_SPACE_NOT_EXIST(16002001, "一键报馆记录不存在", ""),
    /**
     * 一键报馆记录不可提交
     */
    REPORT_VENUE_SPACE_CAN_NOT_SUBMIT(16002002, "一键报馆记录不可提交", ""),
    /**
     * 一键报馆图纸分类未指定
     */
    REPORT_VENUE_DRAWING_CATEGORY_NOT_EXIST(16002003, "一键报馆图纸分类未指定", ""),
    /**
     * 图纸未上传
     */
    REPORT_VENUE_DRAWING_NOT_EXIST(16002004, "图纸未上传", ""),
    /**
     * 预订的服务不能为空
     */
    SERVICE_CANT_EMPTY(16002005, "预订服务不能为空", ""),

    /*
     *********************加班审核********************
     */
    /**
     * 加班审核记录不存在
     */
    WORK_OVERTIME_AUDIT_NOT_EXIST(16003001, "加班审核记录不存在", ""),
    /**
     * 加班申请无法审核.
     */
    WORK_OVERTIME_CAN_NOT_AUDIT(16003002, "加班申请无法审核", ""),
    /**
     * 加班申请无法删除
     */
    WORK_OVERTIME_CAN_NOT_DELETE(16003003, "加班申请无法删除", ""),
    /**
     * 加班审核记录已存在
     */
    WORK_OVERTIME_AUDIT_HAS_EXIST(16003004, "加班审核记录已存在", ""),
    /**
     * 加班申请无法提交审核
     */
    WORK_OVERTIME_CAN_NOT_SUBMIT(16003005, "加班申请无法提交审核", ""),

    /*
     *********************报修********************
     */
    /**
     * 报修申请不存在
     */
    REPAIR_REPORT_NOT_EXIST(16004001, "报修申请不存在", ""),
    /**
     * 报修申请无法检测
     */
    REPAIR_REPORT_CAN_NOT_CHECK(16004002, "报修申请无法检测", ""),
    /**
     * 报修申请无法取消
     */
    REPAIR_REPORT_CAN_NOT_CANCEL(16004003, "报修申请无法取消", ""),
    /**
     * 报修申请已取消
     */
    REPAIR_REPORT_HAS_CANCEL(16004004, "报修申请已取消", ""),

    /**
     * 报修申请无法报馆
     */
    REPAIR_REPORT_CAN_NOT_REPORT_VENUE(16004005, "报修申请无法报馆", ""),
    /*
     *********************搭建********************
     */
    /**
     * 需要先完成布展验收
     */
    NEED_AFTER_ARRANGEMENT(16005001, "需要先完成布展验收", ""),
    /**
     * 需要先缴纳保证金
     */
    NEED_IS_EARNEST_MONEY_SET(16005002, "需要先缴纳保证金", ""),

    ;

    private final int code;
    /**
     * 中文消息
     */
    private String msg;
    /**
     * 英文消息
     */
    private String enMsg;

    HomeExceptionCode(int code, String msg, String enMsg) {
        this.code = code;
        this.msg = msg;
        this.enMsg = enMsg;
    }

    @Override
    public int getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        //中英文切换
        if (LanguageTypeEnum.CN.name().equals(ContextUtil.getLanguageType())) {
            //中文
            return msg;
        } else if (LanguageTypeEnum.EN.name().equals(ContextUtil.getLanguageType())) {
            //英文
            return enMsg;
        }
        return msg;
    }


    /**
     * Build venue booking exception code.
     *
     * @param msg   the msg
     * @param param the param
     * @return the venue booking exception code
     */
    public HomeExceptionCode build(String msg, Object... param) {
        this.msg = String.format(msg, param);
        return this;
    }

    /**
     * Param venue booking exception code.
     *
     * @param param the param
     * @return the venue booking exception code
     */
    public HomeExceptionCode param(Object... param) {
        msg = String.format(msg, param);
        return this;
    }
}